package front_qianzhi;

public class Main2 {
    public static void fun1(Animal1 a){

    }

    public static Animal1 fun2(){
        Dog1 dog=new Dog1("小黑",3);
        return dog;
    }

    public static void main(String[] args) {

        //重写的三同一不同->返回值类型，参数列表，方法名相同，方法体不同
        //在Dog和Bird类中重写了父类中的eat方法
        Animal1 animal=new Dog1("旺财",1);
        animal.eat();
        Animal1 animal1=new Bird("小鸟",2);
        animal1.eat();

        //当父类引用 引用子类对象，即发生向上转型时

        //当子类重写了父类的方法后，通过父类的引用
        //调用了父类和子类重写的方法，最终结果显示的是调用了子类的方法

        //即同时发生向上转型和重写时，最终的结果是调用子类中重写的父类方法
        //此过程即为 动态绑定/运行时绑定
    }
}

class Animal1{
    public String name;
    int age;

    public Animal1() {
    }

    public Animal1(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void eat(){
        System.out.println(name + " 正在吃...");
    }

}

class Dog1 extends Animal1 {
    public Dog1() {
    }

    public Dog1(String name,int age){
        super(name,age);
    }

    public void bark(){
        System.out.println(name + " 正在叫...");
    }

    public void eat(){
        System.out.println(name + " 正在吃狗粮...");
    }

}

class Bird extends Animal1 {
    public Bird() {
    }

    public Bird(String name, int age) {
        super(name, age);
    }

    public void fly(){
        System.out.println(name + "正在飞");
    }

    public void eat(){
        System.out.println(name + " 正在吃鸟粮...");
    }
}